module hip.loaders.tileset; import hip.filesystem.hipfs; import hip.asset_manager.load_task; import hip.assetmanager; import hip.api.data.commons; final class HipTilesetLoadTask : HipAssetLoadTask { private HipFSPromise fs; this(string path, string name, HipAsset asset, const(ubyte)[] extraData, string fileRequesting, size_t lineRequesting) { super(path,name,asset,extraData, fileRequesting,lineRequesting); } override void update() { final switch(result) with (HipAssetResult) { case waiting: result = loading; worker = HipAssetManager.loadWorker("Load and Decode Tileset", () { HipFS.read(path) .addOnError((string err){error = err; result = cantLoad;}) .addOnSuccess((in ubyte[] data) { HipTileset.readFromMemory(path, cast(string)data, (HipTileset set) { asset = set; set.loadImage((IImage img){result = mainThreadLoading;}, (){result = cantLoad; error = "Failed at loading Tileset image.";}); }, (){result = cantLoad; error = "Failed at creating Tileset";}); return FileReadResult.free; }); }); break; case loading: break; case mainThreadLoading: HipTileset set = cast(HipTileset)asset; if(!set.loadTexture()) { error = "Could not load Texture from Tileset"; result = cantLoad; return; } result = loaded; break; case cantLoad: goto case loaded; case loaded: break; } } }